// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_DEBUG_RASTERIZE_AND_RECORD_BENCHMARK_IMPL_H_
#define CC_DEBUG_RASTERIZE_AND_RECORD_BENCHMARK_IMPL_H_

#include <stddef.h>

#include <map>
#include <utility>
#include <vector>

#include "base/single_thread_task_runner.h"
#include "base/time/time.h"
#include "cc/debug/micro_benchmark_impl.h"
#include "cc/raster/task_graph_runner.h"

namespace cc {

class LayerTreeHostImpl;
class PictureLayerImpl;

class RasterizeAndRecordBenchmarkImpl : public MicroBenchmarkImpl {
public:
    explicit RasterizeAndRecordBenchmarkImpl(
        scoped_refptr<base::SingleThreadTaskRunner> origin_task_runner,
        base::Value* value,
        const MicroBenchmarkImpl::DoneCallback& callback);
    ~RasterizeAndRecordBenchmarkImpl() override;

    // Implements MicroBenchmark interface.
    void DidCompleteCommit(LayerTreeHostImpl* host) override;
    void RunOnLayer(PictureLayerImpl* layer) override;

private:
    struct RasterizeResults {
        RasterizeResults();
        ~RasterizeResults();

        int pixels_rasterized;
        int pixels_rasterized_with_non_solid_color;
        int pixels_rasterized_as_opaque;
        base::TimeDelta total_best_time;
        size_t total_memory_usage;
        int total_layers;
        int total_picture_layers;
        int total_picture_layers_with_no_content;
        int total_picture_layers_off_screen;
    };

    RasterizeResults rasterize_results_;
    int rasterize_repeat_count_;
};

} // namespace cc

#endif // CC_DEBUG_RASTERIZE_AND_RECORD_BENCHMARK_IMPL_H_
